package com.tx.core.webdomain.server;

import java.lang.management.ManagementFactory;
import java.util.Date;

import com.tx.core.util.Arith;
import com.tx.core.util.DateUtils;

/**
 * JVM相关信息<br/>
 * <功能详细描述>
 * 
 * @author  PengQingyang
 * @version  [版本号, 2022年10月8日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class Jvm {
    
    /** 当前JVM占用的内存总数(M) */
    private double total;
    
    /** JVM最大可用内存总数(M) */
    private double max;
    
    /** JVM空闲内存(M) */
    private double free;
    
    /** JDK版本 */
    private String version;
    
    /** JDK路径 */
    private String home;
    
    /**
     * @return 返回 version
     */
    public String getVersion() {
        return version;
    }
    
    /**
     * @param 对version进行赋值
     */
    public void setVersion(String version) {
        this.version = version;
    }
    
    /**
     * @return 返回 home
     */
    public String getHome() {
        return home;
    }
    
    /**
     * @param 对home进行赋值
     */
    public void setHome(String home) {
        this.home = home;
    }
    
    /**
     * @return 返回 total
     */
    public double getTotal() {
        return Arith.div(total, (1024 * 1024), 2);
    }
    
    /**
     * @param 对total进行赋值
     */
    public void setTotal(double total) {
        this.total = total;
    }
    
    /**
     * @return 返回 max
     */
    public double getMax() {
        return Arith.div(max, (1024 * 1024), 2);
    }
    
    /**
     * @param 对max进行赋值
     */
    public void setMax(double max) {
        this.max = max;
    }
    
    /**
     * @return 返回 free
     */
    public double getFree() {
        return Arith.div(free, (1024 * 1024), 2);
    }
    
    /**
     * @param 对free进行赋值
     */
    public void setFree(double free) {
        this.free = free;
    }
    
    /**
     * 获取虚拟机使用量
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return double [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public double getUsed() {
        return Arith.div(total - free, (1024 * 1024), 2);
    }
    
    /**
     * 获取虚拟机使用率<br/>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return double [返回类型说明]
     * @exception throws [异常类型] [异常说明]
     * @see [类、类#方法、类#成员]
     */
    public double getUsage() {
        return Arith.mul(Arith.div(total - free, total, 4), 100);
    }
    
    /**
     * 获取JDK名称
     */
    public String getName() {
        return ManagementFactory.getRuntimeMXBean().getVmName();
    }
    
    /**
     * JDK启动时间
     */
    public Date getStartTime() {
        return DateUtils.getServerStartDate();
    }
    
    /**
     * JDK运行时间
     */
    public Date getRunTime() {
        return DateUtils.getServerStartDate();
    }
    
    /**
     * 运行参数
     */
    public String getInputArgs() {
        return ManagementFactory.getRuntimeMXBean()
                .getInputArguments()
                .toString();
    }
}
